package ExceptionAndThread.Exception;

import java.util.List;

/*
    异常的注意事项
*/
public class ExceptionTest01 {
    public static void main(String[] args) {
/*
        多个异常如何处理
                1、多个异常分别处理
                2、多个异常一次捕获，多次处理
                3、多个异常一次捕获一次处理
*/
        //1、多个异常分别处理
        /*try {
            int arr[] = {1, 2, 3};
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }


        try {
            List<Integer> list = List.of(1, 2, 3);
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        System.out.println("后续代码可以执行");
*/


        //2、多个异常一次捕获，多次处理
        /*try {
            int arr[] = null;
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);

            List<Integer> list = List.of(1, 2, 3);
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        System.out.println("后续代码可以执行");*/
        /*
        注意：
            当catch中有多个异常对象时，如果有子父类关系，则需要将子类写在父类上面，否则编译报错
        例如：
            ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException则把
            ArrayIndexOutOfBoundsException写上面
            IndexOutOfBoundsException写下面
         */


        //3、多个异常一次捕获一次处理
       /* try {
            int arr[] = {1, 2, 4};
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);

            List<Integer> list = List.of(1, 2, 3);
            // java.lang.ArrayIndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        System.out.println("后续代码可以执行");*/
        //多个异常可以共用一个异常对象
        //最顶层的异常为Exception

        //运行时产生的异常，被抛出可以不处理，即不捕获也不声明抛出
        //默认给虚拟机处理，终止程序，什么时候不抛出异常，在继续执行程序
        int arr[] = {1, 2, 4};
        // java.lang.ArrayIndexOutOfBoundsException
        System.out.println(arr[3]);

        List<Integer> list = List.of(1, 2, 3);
        // java.lang.ArrayIndexOutOfBoundsException
        System.out.println(list.get(3));
        System.out.println("后续代码可以执行");


    }
}
